"""
题目描述：
实现一个装饰器log_decorator，为函数添加以下功能：
1.	调用函数前打印日志："函数 {func_name} 开始执行..."；
2.	调用函数后打印日志："函数 {func_name} 执行结束，耗时 {time} 秒"（time为函数运行时间，保留3位小数）；
3.	若函数执行过程中抛出异常，捕获异常并打印："函数 {func_name} 执行出错：{error_msg}"，不中断程序。
要求：
•	装饰器需支持带参数的函数（如def add(a, b): return a + b）；
•	使用@log_decorator语法将装饰器应用到函数divide(a, b)（实现两数相除），并测试当b=0时的异常处理。
"""
import time
import functools

def log_decorator(func):
    @functools.wraps(func)#@functools.wraps(func) 是一个装饰器，用于在创建自定义装饰器时保留被装饰函数的元信息
    def wrapper(*args, **kwargs):#位置参数和关键字参数
        start_time = time.time()
        print(f"函数 {func.__name__} 开始执行...")#func.__name__ - 获取函数对象的名称属性
        try:
            result = func(*args, **kwargs)
            return result
        except Exception as e:
            print(f"函数 {func.__name__} 执行出错：{e}")
        finally:
            end_time = time.time()
            duration = end_time - start_time
            print(f"函数 {func.__name__} 执行结束，耗时 {duration:.3f} 秒")
    return wrapper

@log_decorator
def divide(a, b):
    return a / b

# 测试正常情况
# divide(10, 2)

# 测试异常情况
divide(10, 0)